package com.xscha.tableforge.service;

import com.xscha.tableforge.model.entity.ViewMeta;
import com.xscha.tableforge.model.vo.PageReq;
import com.xscha.tableforge.model.vo.PageResult;

import java.util.List;
import java.util.Optional;

/**
 * 视图元数据服务接口
 * 提供视图元数据的增删改查等操作
 */
public interface ViewMetaService {

    /**
     * 根据表ID查找所有视图元数据
     *
     * @param tableId 表ID
     * @return 视图元数据列表
     */
    List<ViewMeta> findAllByTableId(String tableId);

    /**
     * 根据ID查找视图元数据
     *
     * @param id 视图元数据ID
     * @return 包含视图元数据的Optional对象
     */
    Optional<ViewMeta> findById(String id);

    /**
     * 分页查询指定表的视图元数据
     *
     * @param tableId 表ID
     * @param pageRequest 分页请求参数
     * @return 分页结果
     */
    PageResult<ViewMeta> findPageByTableId(String tableId, PageReq pageRequest);

    /**
     * 创建新的视图
     *
     * @param viewMeta 视图元数据对象
     * @param userId 创建者用户ID
     * @return 创建后的视图元数据对象
     */
    ViewMeta createView(ViewMeta viewMeta, String userId);

    /**
     * 更新视图信息
     *
     * @param viewMeta 视图元数据对象
     * @param userId 修改者用户ID
     * @return 更新后的视图元数据对象
     */
    ViewMeta updateView(ViewMeta viewMeta, String userId);

    /**
     * 删除视图
     *
     * @param id 视图元数据ID
     * @param userId 删除者用户ID
     */
    void deleteView(String id, String userId);

    /**
     * 更新视图分享设置
     *
     * @param id 视图元数据ID
     * @param enableShare 是否启用分享
     * @param shareMeta 分享元数据
     * @param userId 修改者用户ID
     * @return 更新后的视图元数据对象
     */
    ViewMeta updateShareSettings(String id, boolean enableShare, String shareMeta, String userId);
}
